home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d26
/
qmtek601.arc
/
APIBRO.TEC
< prev
next >
Wrap
Text File
|
1991-05-23
|
48KB
|
1,234 lines
ID:AB DESQview API General Information
Quarterdeck Technical Note #187
By Jim Susoy
In the Quarterdeck view of the world there are three kinds of DOS
programs.
There's the DESQview-oblivious program, such as 1-2-3 or
AutoCAD,written
with no consideration of DESQview, but still compatible with
DESQview.
There's the DESQview-aware program. It has been modified slightly
so that
it runs efficiently in DESQview and concurrently with other
programs.
Paradox, DBASE III, DBASE IV, FoxPro and WordPerfect are
DESQview-aware.
Then there's the DESQview-specific program, like the DESQview
Datebook.
It's written to take advantage of DESQview's power. If you look
closely,
you'll discover DESQview behind both the ICL North America and
IBM/Tridata
point of sale systems, US Data's factory control systems, TRW's
title
insurance system, Moody's Investor's Services' bond rating system,
FNN's NewsReal and Novell's Remote Access Server, to name only a
few.
Hidden deep inside DESQview 2 is a powerful API (Application
Program
Interface) that lets programs control and interact with DESQview
and with
other programs running in DESQview. For MIS and DP departments
building
workstation solutions, the DESQview API provides enormous benefits.
For it
brings OS/2 capabilities (and even OS/2 look and feel if desired)
to DOS.
Using the DESQview API, a program can use all the DESQview menu
functions
available to the user as well as the power-packed capabilities
built
into DESQview multitasking, windowing, intertask communications,
mailboxes,
shared programs, memory management, mousing, data transfer,
menu-building,
and help.
So DOS programs can now act alone or together. Either within a
window or
hidden behind one, they can do chores in silence or in chorus, all
the while
utilizing the full power of DESQview, all the while bringing you
treasures
you only dreamed 'til now were possible.
A program taking advantage of the DESQview API can display
information in
windows and control the color, dimensions, position and ordering of
windows
on the screen. It can disable, limit or enhance the standard
DESQview user
interface. Which means that you can have DESQview-like menus in
your
program. Or menu bars and pull-down menus. Or IBM SAA-like menus.
It can let
DESQview handle all keyboard and mouse input to menus and forms yet
still
process keyboard and mouse input directly when necessary. It can
schedule
processing after a certain time interval or at a certain time. It
can spawn
subtasks for performing background operations such as printing,
recalculating, and communicating. It can communicate between the
various
tasks in the system.
Multitasking
DESQview supports true multitasking of existing DOS programs in
addition to
programs written specifically for DESQview. So a user can run
multiple
programs (Lotus 1-2-3, DBASE IV and others) and DESQview-specific
programs
(DESQview Datebook, Calculator, your own program) concurrently. So
a user can
switch to whichever program needs input and switch away while the
program
recalculates or sorts in background.
Under DESQview, each program runs in its own "virtual machine",
thinking it
has exclusive access to DOS, the keyboard, etc. DESQview calls
these virtual
machines "processes". DESQview calls the portion of a process that
keeps
track of which instruction to execute next and what the register
contents
are a "task" (or "thread"). Every program running under DESQview
consists,
initially, of a single process running a single task.
DESQview-specific programs may create additional tasks within their
own
processes and additional processes. Additional tasks allow a
portion of your
program, the part that controls the printer for example, to be run
in
background. Additional processes allow whole new programs to be
loaded and
run concurrently.
Presentation Management
Because DESQview lets you run more than one program at a time,
DESQview
provides a way to view more than one program at a time on the
screen.
DESQview does this by mapping each program into its own "window"
and by
managing the display of multiple windows on the screen. To
DESQview, windows
are rectangular areas of displayable information. They may be
moved, resized,
colored, and reordered by either the user or by your program.
Everything that
is displayed on the screen under DESQview is displayed in a window.
Multiple windows are not only useful for displaying several
programs
simultaneously, but may also be used within a single program to
display
menus, help screens, error messages. DESQview provides facilities
for storing
complete descriptions of such windows, (known by DESQview as
"panels"), on
disk or in your program and displaying them with a single call to
the API.
These panels may be as simple as one-line error messages or as
complex as
data entry forms with multiple-choice and data entry fields.
Once a panel has been displayed, your program can ask DESQview's
"field
manager" to process all user input to the panel including mousing
and data
entry editing. The field manager returns the results to your
program in a
simple, field-oriented format, independent of the appearance of the
panel.
The use of panels and the field manager not only simplifies the job
of
programming an application, but gives a consistency to the user
interface
that makes the learning of new applications easier.
Intertask Communications
So that DESQview-specific programs can rapidly exchange
information, DESQview
provides a wide range of intertask communications facilities. These
facilities allow several concurrently running tasks to exchange
information
or signals, to lock access to common resources, to share common
code and
data, and to interrupt each other to handle critical events. These
tasks can
be in either the same or in different processes.
Intertask communication is the key to building complex applications
in a
multitasking environment. Let's say, for example, you are building
a point of
sale system, that handles a dozen cash registers for a department
store.
Using DESQview you could break your application up into fourteen
tasks; one
for each of the cash registers, one to handle access to the pricing
data-base
and one to track sales and generate management reports. The cash
register
tasks would process keystrokes from the clerk until an item price
is needed.
They would then send a message to the database task requesting the
price. The
database task would log the sale and return the price to the sender
of the
request. Meanwhile, the store manager could interact with the
reporting task
to monitor sales, clerk performance, etc.
Data Transfer
DESQview supports two types of user-initiated data transfer. The
first,
called Mark &Transfer, lets a user mark text in any window and
transfer
that text to any other application. The application receiving the
data can be DESQview-oblivious, seeing the data as normal keyboard
input.
More sophisticated transfers are possible between DESQview-specific
applications that support the DESQview Scissors command. When the
user marks data in such an application, DESQview notifies the
application
that data has been requested and lets the application determine
exactly
what data to supply. The application may supply anything including
text, formulas, or even graphics images. When the user instructs
DESQview
to Paste the data into another application, that application is
also
notified so that the data can be handled appropriately.
The applications involved in a Scissors transfer can even use
DESQview's
intertask communication facilities to setup a "hot-link" between
them-
selves so that subsequent changes to the data are automatically
reflected
in both applications.
Memory Management
Programs running under DOS are typically given all of a PC's memory
to do with as they please. In a multitasking environment, memory
must
be managed so that more than one program can be loaded at a time
and
so that no single program is given more memory than it needs.
DESQview
provides this management in a way that adapts to the type of memory
hardware available on your PC.
If your PC has 640K of conventional memory, DESQview is able to
multitask
as many programs as will fit in memory at the same time. Additional
programs can be loaded but will cause the least recently used
programs
to be suspended and swapped to disk to make room in memory for the
new ones.
If your PC is a 286-based system with extended memory, DESQview can
still only multitask the programs that fit in 640K. Additional
programs
open can be swapped either to RAM disk, as well as to the user's
local
disk or network disk. DESQview is also capable of running 60K of
itself
in extended memory<197>thus reducing its DOS conventional memory
overhead.
If you have EMS 3.2 (Lotus-Intel-Microsoft Expanded Memory),
DESQview
will swap programs to expanded memory instead of to disk. This is
so much faster than swapping to disk that the swap time is almost
not noticeable.
If your PC has EMS 4.0 or EEMS (AST-Quadram-Ashton Tate Enhanced
Expanded
Memory) or a 386-based PC with an EMS 4.0 driver, DESQview can
actually
multitask as many programs as will fit in conventional and expanded
memory.
This can be as high as 32-megabytes worth of programs. DESQview can
also run
a large part of itself in expanded memory, giving a much larger
maximum
program size.
Furthermore, DESQview can actually run both 286 or 386 DOS Extended
programs simultaneously with your other DOS programs. DOS Extended
programs are programs, such as 1-2-3 Release 3, IBM Interleaf,
AutoCAD
386, Paradox 386, which have been written to take advantage of
either
the 16-bit protected mode of the 80286 processor or the 32-bit
protected
mode of the 80386 processor. It is important to note that for
DESQview
to be able to run DOS Extended programs, the DOS Extender must
conform
to the PharLap/Quarterdeck VCPI (Virtual Control Program Interface)
specification which specifies how protected mode programs and 80386
control programs can work together. With most DOS Extenders, you
also
get the added benefit of virtual memory support automatically built
into the program a significant benefit if your users have limited
memory.
Customization
Although DESQview is best known for its ability to run
off-the-shelf
software concurrently, DESQview is an ideal platform for developing
customized vertical market applications and workstations.
DESQview's intertask communications and shared program and data
capabilities,
coupled with its support of expanded memory, give developers
efficient
and cost effective techniques for developing large programs that
can
still run on DOS and thus on the large installed base of DOS PCs.
In addition to providing multitasking and windowing services,
DESQview can be custom-ized to provide the user interface
appropriate
to a particular application. This customization can take the form
of
restricting access to certain DESQview menus, taking special action
when
certain menu items are selected, or, in the extreme, disabling all
access to
DESQview menus and providing the entire user interface as part of
the
application.
In this latter case, the only part of DESQview that the user sees
is a copyright screen during start-up. DESQview also includes a
keystroke
macro capability enabling you to create built-in macros for each
application
running as well as global macros which combine actions from several
programs.
Portability
DESQview with its entire API runs on 8088, 8086, 80286, 80386 and
80486i PCs as well as the IBM Personal System/2s with monochrome,
CGA, EGA, VGA or Hercules display adapters. Additionally, Wyse 700
and Micro Display System Genius adapters are available from
Quarterdeck.
This means that an application that you write to be
DESQview-specific
can run on any PC from a laptop dual-floppy PC to the very latest
486-based PC. It can even run over a network on a diskless PC.
Thus, the market for your DESQview-specific application extends to
the entire base of existing and future DOS PCs.
API Details
In order for you to get a feel for the power built-in to each and
every DESQview, we've included a short description about each API
command.
The DESQview API is an object-oriented interface. The data
structures
DESQview uses to represent windows, mailboxes, etc. are called
"objects".
A call to the API involves "sending a message" to an object,
indicating
which of several operations you want performed on that data
structure.
This is referred to as the "send interface." Almost the entire API
consists of sending one of 25 messages to one of 7 different object
types.
The DESQview API also has a non-object-oriented interface called
the
"direct call interface". This is the small subset of API functions
that are not, by nature, object oriented or that are convenient
alternatives
to the send interface.
The DESQview API has a concise way of encoding a complete
description
of a window so that a single call to the API can create the window,
fill it with the desired information, size and position it on the
display, and define fields that interact with the user. All this is
done using "Window Streams".
So that you can interrogate a window for its current
contents, position, etc., the DESQview 2 API also has "Query
Streams."
In fact, any window parameter that can be set by a Window Stream
can
be read by a Query Stream.
DESQview calls the portion of itself that interfaces with the user
the "Window Manager." Each time a user presses the DESQ key
(normally
the Alt key) and makes a menu selection, it is the Window Manager
that opens, switches, rearranges and closes windows, transfers
data,
displays help, or quits DESQview. In order for an application to
have
the same power as the user, the DESQview API has "Manager Streams."
Manager Streams enable an application to interact with the Window
Manager.
Using Manager Streams an application can, for example, ask the
Window
Manager to make one of its windows the topmost window in the
system,
disallow any resizing of the window by the user, and even notify
the application if the user tries to close the window. Using
Manager
Streams an application can disallow use of the DESQview menu and
DESQview
submenus.
But, there's still even more to the DESQview API. DESQview provides
a comprehensive set of functions for simplifying the job of
interfacing
with the user. Instead of dealing with user input a single
character
at a time, your application can present entire menus, dialogue
boxes,
help screens to DESQview and get back the resulting user input.
Common
functions such as cursor control, insertion and deletion of
characters,
tracking the mouse, and selection from option lists are performed
by DESQview. DESQview performs these functions under control of a
data structure called the "Field Table.."
Information about a window's size, position, contents and Field
Table
can be combined together into "Panels." Panels can be stored on
disk
or in memory for later display. Panels can be constructed manually
or via the DESQview API Panel Design Tool.
DESQview 2 API Commands:
Send Interface Commands
WINDOW Objects
ADDTO write characters & attributes to a window
AT position the logical cursor
CONNECT connect one window to another window
EOF return TRUE if cursor is past end window
ERASE clear a window
FREE close and free a window or a task
HANDLE return handle of current task's window
LEN return # characters/line in logical window
NEW create a new window or task
OPEN fill a window with a given character
READ read the next logical line from a window
READN read the next n characters/attributes
REDRAW redraw a window
SIZEOF return total # characters/logical window
SUBFROM write attributes to a window
WRITE write characters and/or command streams
KEYBOARD Objects
ADDTO set individual keyboard control flags
CLOSE close a keyboard object
ERASE discard all input queued to keyboard
FREE free a keyboard object
GETFLAGS get keyboard control flags
GETPRI get objectq priority level of keyboard
HANDLE return handle of task's default keyboard
NEW create a new keyboard object
OPEN attach a keyboard to a window
READ get the next input from the keyboard
SETESC intercept keystrokes to input fields
SETFLAGS set/clear all keyboard control flags
SETPRI set objectq priority level of keyboard
SIZEOF return # of input buffers queued
STATUS get the scan code for the last key read
SUBFROM clear individual keyboard control flags
WRITE add input buffer to keyboard queue
MAILBOX Objects
ADDR return sender of the last message READ
ADDTO send a message and status by value
CLOSE close a mailbox
ERASE discard all queued messages
FREE free a mailbox
GETFLAGS get mailbox control flags
GETPRI get objectq priority level of mailbox
HANDLE return handle of task's default mailbox
LOCK request exclusive access to a resource
NEW create a new mailbox
OPEN open a mailbox for input
READ get the next message from the queue
SETFLAGS set/clear all mailbox control flags
SETNAME assign a name to a mailbox
SETPRI set objectq priority level of mailbox
SIZEOF return the # of messages in the queue
STATUS return status of the last message READ
SUBFROM send a message & status by reference
WRITE send a message by value with status=0
OBJECTQ Objects
CLOSE close an objectq
ERASE remove all objects from the queue
HANDLE return the handle of a task's objectq
OPEN open the objectq
READ wait for input from any open object
SIZEOF return the number of objects queued
STATUS return whether or not objectq is open
SUBFROM remove specific object from queue
WRITE add an object to the objectq
PANEL Objects
APPLY display a particular panel
CLOSE close a panel object
DIR return a pointer to the panel directory
FREE free a panel object
NEW create a panel object
OPEN associate panel object with a panel file
SIZEOF return the # of panels in a panel file
STATUS verify success of an OPEN or APPLY
POINTER Objects
ADDTO set pointer control flags
CLOSE stop taking pointer input
ERASE discard all pointer messages
FREE free a pointer object
GETFLAGS get pointer control flags
GETPRI get objectq priority level of pointer
GETSCALE return the current scaling factors
NEW create a new pointer object
OPEN start taking pointer input for window
READ wait for the next pointer message
SETFLAGS replace pointer control flags
SETPRI set objectq priority level of pointer
SETSCALE set the current scaling factors
SIZEOF return the number of messages queued
STATUS return the status of the last message
SUBFROM reset pointer control flags
WRITE move the pointer to a specified position
TIMER Objects
ADDTO start a timer for a specified interval
CLOSE close a timer object
ERASE cancel the current timer interval
FREE free a timer object
GETPRI get objectq priority level of timer
LEN return time remaining before expiration
NEW create a new timer object
OPEN open a timer object
READ wait for the current timer to expire
SETPRI set objectq priority level of timer
SIZEOF return elapsed time since timer started
STATUS return the status of the timer object
WRITE start a timer to end at a specified time
Direct Call Interface Commands
APILEVEL define minimum API level required
APPNUM get the current application's number
ASSERTMAP get current mapping context & set new
BEGINC begin critical region
CSTYLE use C language style control codes
DBGPOKE poke debug information onto display
DISPEROR display an error message window
DVPRESENT determine if DESQview is present
ENDC end critical region
FINDMAIL find a mailbox by name
FREEBIT undefine second-level interrupt handler
GETBIT define a second-level interrupt handler
GETBUF get address of a Logical Window Buffer
GETCRIT get critical region nesting level
GETERROR get error handling level of current task
GETMEM allocate buffer from System Memory
ISOBJ determine if a handle is valid
JUSTIFY turn off/on automatic justification
KMOUSE control the keyboard mouse
LOCATE find window at given screen location
NEWPROC start a new process
OBJTYPE determine object type of a given handle
OSTACK switch to task's internal stack
PAUSE relinquish control to other tasks
PGMINT interrupt another task
POSTTASK awaken task by posting its Objectq
POSWIN position a window on the display
PRINTC display a character in a window
PUSHKEY push key into keyboard input stream
PUTMEM free a buffer allocated by GETMEM
SETBIT schedule a second-level interrupt handler
SETERROR set error handling level of current task
SHADOW get window buffer and start shadowing
SOUND make a sound
START start a task that was previously stopped
STOP stop a task until START is called
UPDATE update a portion of a window
USTACK switch off task's internal stack
Window Stream & Query Stream Commands
00 to 9F print strings (attrib,char,blanks) to window
A0 to CF change size/ position of a window
D0 to DF set options for appearance of window:
frames,color,show/hide
window, display of control characters
E0 to EF perform immediate actions:clearing,scrolling recoloring,
redrawing window;create new windows & repeat command
sequences
F0 to FF define, read, write fields within window.
Manager Streams
00 to 3F Allows specific DESQview commands:
move & resize window, scroll data, hide
rearrange program, suspend application,
display DESQview menu
40 to 71 notify application on specific DV commands.
84 to 8B specify environment of window: suspend
application when it is in background, set
application's asynchronous notification.
AE to BF enable/disable DESQview extensions.
C0 to FF reorder, hide, unhide, suspend resume
applications.
C, Pascal, BASIC, Clipper & dBASE
Listed below are API Interfaces available with each DESQview API
library.
C - C
P - Pascal
B - Basic
R - Clipper
D - dBase
General Functions
CPBRD
-----
YYYYY api_beginc begin critical region
YYYYY api_cancel cancel current Window Mgr operation
YYYY api_commonmem get status of Common Memory
YYYY api_convenmem get status of Conventional Memory
Y api_curdrive get the current default drive
Y api_dec convert hex string to unsigned decimal #
YY Y api_dvpresent determine if DESQview is present
YYYYY api_endc end critical region
YYYY api_enterc begin critical region w/o waiting for DOS
YYYYY api_exit exit API interface
YYYY api_expandmem get status of Expanded Memory
YY Y api_freebit disconnect 2nd level interrupt handler
YY Y api_getbit define 2nd level interrupt handler
YYYYY api_getcommon get Common Memory buffer
YYYYY api_getcrit get critical region nesting level
YYYYY api_getmem get System Memory buffer
Y api_hex convert decimal # to hexadecimal string
Y api_hexaddr convert addr to string in seg:off hex form
YYYYY api_init initialize API interface & return version of
DESQview
Y api_interactive determine if in BASIC interactive
environment
YYYYY api_isobj determine if a given handle is valid
Y api_isset determine if given bit is set within a
specified byte
YYYYY api_justify enable/disable automatic justification of
task window
YYYYY api_kmouse turn keyboard mouse on and off
YYYYY api_level define API revision level that application
requires
YYYYY api_objtype determine object type of a given handle
YYYYY api_pause give other tasks a chance to run
YYYYY api_poke display debug info on bottom line of screen
YYYY api_processmem get status of app's Process Memory
YYYYY api_pushkey push key into input stream
YYYY api_putcommon return Common Memory buffer
YYYY api_putkey put key into an application's input stream
YYYY api_putmem return System Memory buffer
Y api_read read from DV-owned memory buffer
YY Y api_setbit schedule a 2nd level interrupt handler
YY Y api_shadow get task's logical window buffer & start
shadowing
YYYYY api_sound make a sound
YY Y api_update redraw portion of a task's logical window
Y api_write write to DESQview-owned memory buffer
Application Management Functions
CPBRD
-----
YYYYY app_foreonly indicate whether app can run in background
YYYYY app_free free an application and its window
YYYYY app_goback force an application into background
YYYYY app_gofore force an application into foreground
YYYYY app_hide hide all windows of an application
YYYY app_new start a new app in the current process
YYYYY app_number get the current app's Switch number
Y app_run execute DOS command in new process
YYYYY app_show display all windows of an application
YYYYY app_start start a new application in a new process
YYYYY app_suspend suspend and hide all tasks in an app
Field Management Functions
CPBRD
-----
YYYYY fld_altmode set Alternate Field Processing mode
Y fld_atget input data at specified field position
Y fld_atprompt paint menu prompts & define msg at fld
Y fld_atsay display data at specified field
YYYYY fld_attr fill a field with a given attribute
YYYYY fld_char fill a field with a given character
YYYYY fld_clear clear a field
YYYYY fld_cursor move cursor to a field
YYYYY fld_entry change field table entry
YYYYY fld_header change field table header
YYY fld_lentry load field table entry of field table window
stream
YYY fld_lheader load field table header of field table
window stream
YYYYY fld_marker define selected-field marker character
YYYYY fld_point move pointer to a given position in a field
YYYYY fld_protattr set Protected Attrib field processing mode
YYYYY fld_reset reset selected and modified bits
YYYYY fld_scroll scroll a field
YYY fld_stream allocate string space for field table window
stream
YYYYY fld_type change the type of a field
YYYYY fld_write write a string into a field
Keyboard Management Functions
CPBRD
-----
Y key_accept enter a string into a memory variable
YYYYY key_addto set keyboard control flags
Y key_clear empty keyboard type ahead buffer
Y key_clkey convert DV key code to Clipper key code
YYYYY key_close disconnect keyboard from its window
Y key_dvkey convert Clipper key code to DV key code
YYYYY key_erase discard pending keyboard input
YYYYY key_free free a keyboard object
YYYYY key_getc wait for next key (keystroke mode)
YYYYY key_getflags get keyboard control flags
YYYYY key_getpri get priority level of keyboard in objectq
YY key_inkey read a character from keyboard
Y key_input enter an expression into a memory variable
Y key_keyboard stuff keyboard buffer with a string
Y key_lastkey determine last key fetched from keybd
YYYYY key_me get current task's keyboard handle
Y key_nextkey read the next key from keyboard
YYYYY key_new create a new keyboard object
YYYYY key_of get handle of a given task's keyboard
YYYYY key_open attach keyboard to a given window
YYYY key_owner get owner of a given keyboard
YYYYY key_read read input from keyboard
Y key_readinsert return the current insert mode setting
Y key_readlast read DV key code in key_lastkey buffer
Y key_setcursor determine if hardware cursor displayed
YYYY key_setesc define function to filter keys in fld mode
YYYYY key_setflags replace keyboard control flags
YYYYY key_setpri set priority level of kbd in task's objectq
YYYYY key_sizeof get # keyboard messages pending
YYYYY key_status get status of last keyboard message
YYYYY key_subfrom clear keyboard control flags
Y key_wait suspend task until a key is pressed
YYYYY key_write write string to keyboard
Y key_writelast write DV key code into
Mailbox Management Functions
CPBRD
-----
YYYYY mal_addr return sender of last message
YYYYY mal_addto send a message by value with given status
YYYYY mal_close close a mailbox
YYYYY mal_erase erase all pending messages
YYYYY mal_find find a mailbox by name
YYYYY mal_free free a mailbox object
YYYY mal_getflags get mailbox control flags
YYYY mal_getpri get priority level of mailbox in objectq
YYYYY mal_lock lock access to a resource
YYYYY mal_me get handle of current task's mailbox
YYYYY mal_name assign a global name to a mailbox
YYYYY mal_new create a new mailbox
YYYYY mal_of get handle of a given task's mailbox
YYYYY mal_open open a mailbox
YYYY mal_ownerget owner of a given mailbox
YYYYY mal_read wait for next message
YYYY mal_setflags replace mailbox control flags
YYYY mal_setpriset priority level of mailbox in task's objectq
YYYYY mal_sizeof get # messages pending
YYYYY mal_status get status of last message received
YYYY mal_subfrom send msg by reference w given status
YYYYY mal_unlock unlock access to a resource
YYYYY mal_write send a message by value with status zero
Objectq Management Functions
CPBRD
-----
YYYYY obq_close close the task's objectq
YYYYY obq_erase erase contents of the task's objectq
YYYYY obq_open open the task's objectq
YYYYY obq_read wait for any object to have input
YYYYY obq_sizeof get # of objectq entries pending
YYYYY obq_status determine if the task's objectq is open
YYYYY obq_subfrom remove copies of object handle from task's
objectq
YYYYY obq_write add an object handle to task's objectq
Panel Management Functions
CPBRD
-----
YYYYY pan_apply display a named panel & prepare for input
YYYYY pan_close close a panel file
YYYY pan_dir get list of panels in the panel file
YYYYY pan_free free a panel object
YYYYY pan_new create a panel object
YYYYY pan_open open a panel file
YYYY pan_owner get owner of a given panel
YYYY pan_sizeof get # panels in the panel file
YYYYY pan_status get status of last pan_open or pan_apply
Pointer Management Functions
CPBRD
-----
YYYYY ptr_addto set pointer control flags
YYYYY ptr_close close a pointer object
YYYYY ptr_erase erase pending pointer messages
YYYYY ptr_free free a pointer object
YYYYY ptr_getflags get pointer control flags
YYYYY ptr_getpri get priority level of pointer in objectq
YYYYY ptr_getscale get current scaling factors
YYYYY ptr_new create a new pointer object
YYYYY ptr_open open pointer and assign to a window
YYYY ptr_owner get owner of a given pointer
YYYYY ptr_read wait for next pointer message
YYYYY ptr_setflags replace pointer control flags
YYYYY ptr_setpri set priority level of ptr in task's objectq
YYYYY ptr_setscale set current scaling factors
YYYYY ptr_sizeof get # messages pending
YYYYY ptr_status get button status from last message received
YYYYY ptr_subfrom clear pointer control flags
YYYYY ptr_write move the pointer to a given position
Query Functions
CPBRD
-----
YYYYY qry_atread TRUE if win_read and win_readn will read
attributes
YYYYY qry_attrget current output attribute
YY Y qry_col get current cursor column position
YYYYY qry_color get physical attribute for given logical
attribute
YYYYY qry_ctrl TRUE if processing control codes
YYYYY qry_cursor get current cursor position
YYYY qry_dosuser get handle of task currently using DOS
YYYYY qry_entry get field table entry
YYYYY qry_field get contents of a field
YYYY qry_flength get length of a field
YYYYY qry_frame TRUE if the window has a frame
YYYYY qry_frattr get current frame attribute
Y qry_ftable get field table window stream
YYYYY qry_header get field table header
YYYYY qry_hidden TRUE if the window is hidden
YYYYY qry_kmouse TRUE if using a keyboard mouse
YYYYY qry_leave TRUE if leaving attributes untouched when
writing to
window
YYYYY qry_logattr TRUE if using logical attributes
YYYYY qry_lsize get size of logical window buffer
YYYYY qry_origin get origin of physical relative to logical
window
YYYYY qry_position get position of physical window
YY Y qry_row get current cursor row position
YYYY qry_scrninfo get current size & video mode of screen
YYYYY qry_size get size of physical window
YYYYY qry_title get window's title
YYYYY qry_type get type of field
Text File Device Driver Functions
CPBRD
-----
Y tfd_attach attach a given window to TFDD
Y tfd_close close TFDD
Y tfd_lock lock access to TFDD
Y tfd_open open TFDD and attach given window
Y tfd_unlock unlock access to TFDD
Timer Management Functions
CPBRD
-----
YYYYY tim_addto start a timer for a given interval
YYYYY tim_close close a timer object
YYYYY tim_erase stop a running timer
YYYYY tim_freefree a timer object
YYYYY tim_getpriget priority level of timer in objectq
YYYYY tim_len get time remaining until timer expires
YYYYY tim_newcreate a new timer object
YYYYY tim_openopen a timer object
YYYY tim_owner get owner of a given timer
YYYYY tim_read wait for timer to expire
YYYYY tim_setpri set priority level of timer in task's
objectq
YYYYY tim_sizeofget time since a timer started running
YYYYY tim_status determine if a timer is running
YYYYY tim_write start a timer for a given time of day
Task Management Functions
CPBRD
-----
YY Y tsk_dispatchint software interrupt another task at a "safer"
time
YYYYY tsk_free free a task and its window
YYYYY tsk_geterrorget error handling level of current task
YYYY tsk_me get handle of current task
YY Y tsk_new create a new task
YY Y tsk_pgmint software interrupt another task
YYYY tsk_owner get owner of a given task
YYYYY tsk_post restart a task waiting on its objectq
YYYYY tsk_seterror set error handling level of current task
YYYYY tsk_start restart a stopped task
YYYYY tsk_stop temporarily stop a task
Window Management Functions
CPBRD
-----
Y win_achoice execute a pop-up menu in a window
YYYYY win_addto write characters & attributes to a window
YYYYY win_adopt adopt a window
YYYYY win_allow specify which DV commands are allowed
YY Y win_async define asynchronous notify function
Y win_atbox draw a box in a window
Y win_atclear clear rectangular region of window
Y win_atget input data at specified window position
Y win_atprompt paint menu prompts & define messages of
window
YYYYY win_atread set read mode to read either character or
attribute
Y win_atsay display data at specified window position
YYYY win_attach attach/detach window to parent task window
Y win_atto draw single or double line box in window
YYYYY win_attr set current output attribute
YYYYY win_blanks write blanks to a window
YYYYY win_bottom make window bottommost in its application
Y win_browse browse & edit records within a window
YYYY win_buffer get address of logical window buffer
YYYYY win_cancel cancel notification on a given event
Y win_clear clear a window and home the cursor
Y win_clcolor convert DESQview physical attribute to
Clipper color
code
Y win_cleargets release all of window's pending gets
Y win_clscroll scroll window region up, down or blank out
YYYYY win_color change logical attribute mapping
YYYY win_connect attach window to another window
YYYYY win_ctrl enable/disable interpretation of control
characters
YYYYY win_cursor move window's logical cursor
Y win_dbedit browse records in a table layout
YYYYY win_dflt change default notify window
YYYYY win_disallow specify which DV commands are not allowed
YYYYY win_disperor display an error message window
Y win_dvattr convert Clipper color code to DESQview
physical
attribute
YYYYY win_eof TRUE if logical cursor is beyond end of
window
YYYYY win_erase clear a window
YYYYY win_frame enable/disable display of a window's frame
YYYYY win_frattr define window frame attribute
YYYYY win_free remove a window from screen and free its
handle
YYYYY win_hcur display hardware cursor at logical cursor
position
YYYYY win_hide mark a window as hidden
YYYYY win_leave leave existing attribute when writing to
window
YYYYY win_len return width of logical window
YYYYY win_locate return which window is visible at given
screen
position
YYYYY win_logattr use logical/physical attributes
YYYYY win_lsize set window's logical dimensions
Y win_mark1/2 display result of an expression in specified
window
YYYYY win_maxsize set window's max physical dimensions
YYYYY win_me get current task's window handle
Y win_menuto execute light-bar menu for defined prompts
in a window
YYYYY win_minsize set window's min physical dimensions
YYYYY win_move move physical window
YYYYY win_new create a new window
YYYYY win_notify enable notification on a given event
YYYYY win_nread read n characters from a window
YYYYY win_open fill a window with a given character
YYYYY win_origin define portion of logical window viewed in
physical
window
YYYYY win_orphan orphan a window
YYYY win_owner get owner of a given window
YYYYY win_paste define window as current clipboard window
YYYYY win_point jump mouse to logical cursor position
YYYYY win_poswin position window relative to another window
YYYYY win_putc write a character/attribute pair to a window
YYYYY win_printf write formatted data to a window
YYYYY win_read read rest of current line from window
Y win_readexit determine whether Up/Down keys exit
Y win_readgets enter editing mode using pending gets in a
window
YYYYY win_redraw redraw a window
YYYY win_reorder reorder an application's windows
YYYYY win_repattr write an attribute to a window n times
YYYYY win_repchar write a character to a window n times
YYYYY win_resize set physical dimensions of a window
Y win_restore display a saved window to a specified window
area
Y win_save save window region to memory variable
YYYYY win_scroll scroll all or part of a window
Y win_setbell determine sounding of bell during
win_readgets
Y win_setcenter determine centering of win_atprompt messages
Y win_setcolor determine color attributes of window
Y win_setconfirm determine required win_atget termination
with Enter
key
Y win_setescape determine whether Esc key terminates
win_readgets
Y win_setintensity toggle display intensity of win_atget and
win_atprompt
Y win_setmessage determine row and centering of win_atprompt
messages
Y win_setwrap determine wrapping in win_menuto
YYYYY win_sizeof get # character positions in the logical
window
YYYYY win_stream write a stream to a window
YYYYY win_subfrom write attributes to a window
YYYYY win_title change a window's title
YYYYY win_top make window topmost in its application
YYYYY win_topsys make window topmost in the system
YYYYY win_unhide mark a window as not hidden
Y win_updated determine if pending gets changed during
last
win_readgets
YYYYY win_write write characters to a window
YES! I'm Interested In System Development/Performance
┌───┬─────┬─────┬────────────────────────────────────────┬───────
┬───────┐
│QTY│5-1/4│3-1/2│ Product │ Price │
Total │
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview │$129.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview386 (DESQview & QEMM) │$219.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ Quarterdeck Manifest │$ 59.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ QRAM │$ 79.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ QEMM 50/60 │$ 99.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ QEMM 386 │$ 99.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview API Debugger │$149.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview API Panel Design Tool │$149.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview API Reference │$ 59.95│$
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview API Libraries (C,Pascal, │ │$
│
│ │ │ │ Basic,Clipper and dBase) │$199.95│
│
│ │ │ │ │ │
│
│ │ │ │ Check One: │ │
│
│ │ │ │ C( ) Clipper( ) Pascal( ) dBase( ) │ │
│
│ │ │ │ Basic( ) │ │
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview API Toolkit (API Reference, │$500.00│$
│
│ │ │ │ Library,Panel Design Tool, │ │
│
│ │ │ │ Debugger, DESQview) │ │
│
│ │ │ │ │ │
│
│ │ │ │ Check One: │ │
│
│ │ │ │ C( ) Clipper( ) Pascal( ) dBase( ) │ │
│
│ │ │ │ Basic( ) │ │
│
├───┼─────┼─────┼────────────────────────────────────────┼───────
┼───────┤
│ │ │ │ DESQview by S.R. Davis (book) │$ 29.95│$
│
├───┴─────┴─────┼────────────────────────────────────────┼───────
┼───────┤
│░░░░░░░░░░░░░░░│ Shipping & Handling │░░░░░░░│
│
│░░░░░░░░░░░░░░░│ USA: $5 │░░░░░░░│
│
│░░░░░░░░░░░░░░░│ Outside USA: $10 │░░░░░░░│$
│
│░░░░░░░░░░░░░░░├────────────────────────────────────────┤░░░░░░░
├───────┤
│░░░░░░░░░░░░░░░│ Sales Tax (CA Only:%6.75) │░░░░░░░│$
│
│░░░░░░░░░░░░░░░├────────────────────────────────────────┼───────
┴───────┤
│░░░░░░░░░░░░░░░│ Amount │$
│
└───────────────┴────────────────────────────────────────┴───────
────────┘
┌────────────────────────────────────────────────────────────────
────────┐
│ Payment: M/C VISA AMEX
│
├────────────────────────────────────────────────────────────────
────────┤
│ Expiration:
│
├────────────────────────────────────────────────────────────────
────────┤
│ Card Number:
│
├─────────────────────┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬──────────
────────┤
│ Name On Credit Card:│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
│
├─────────────────────┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴──────────
────────┤
│ Shipping Address:
│
│
│
│
│
├────────────────────────────────────────────────────────────────
────────┤
│ Telephone:
│
├────────────────────────────────────────────────────────────────
────────┤
│ Signature:
│
└────────────────────────────────────────────────────────────────
────────┘
Quaterdeck Office Systems
150 Pico Blvd., Santa Monica, CA 90405
(213)392-9851
Fax (213)399-3802
Copyright (C) 1991 by Quarterdeck Office Systems
* * * E N D O F F I L E * * *